package com.server.common.utils;

import com.alibaba.excel.EasyExcel;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class EasyExcelUtils {

    /**
     * 将数据导入到流中，前端直接可以下载
     * @param response 响应
     * @param fileName 文件名
     * @param tClass 导出实体
     * @param rows 列表
     * @param <T>
     * @throws IOException
     */
    public static <T> void writeForWeb(HttpServletResponse response, String fileName, Class<T> tClass, List<T> rows) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题，请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
//        String fileName = URLEncoder.encode("原始数据" + DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN), "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), tClass).sheet().doWrite(rows);
    }

    /**
     * 将数据导入到流中，前端直接可以下载
     * @param response 响应
     * @param fileName 文件名
     * @param tClass 导出实体
     * @param rows 列表
     * @param <T>
     * @throws IOException
     */
    public static <T> void writeForWeb(HttpServletResponse response, String fileName, Class<T> tClass, List<T> rows,String sheetName) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题，请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
//        String fileName = URLEncoder.encode("原始数据" + DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN), "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), tClass)
//                .registerWriteHandler(new CustomCellWriteHandler()) // 设置宽度
                .sheet()
                .sheetName(sheetName)
                .doWrite(rows);
    }

    public static <T> void writeForWeb2(HttpServletResponse response, String fileName, Class<T> tClass, List<T> rows,String sheetName) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题，请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
//        String fileName = URLEncoder.encode("原始数据" + DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN), "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), tClass)
                .registerWriteHandler(new CustomCellWriteHandler()) // 设置宽度
                .sheet()
                .sheetName(sheetName)
                .doWrite(rows);
    }

}
